﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Prisa.BussinesLogic;
using Prisa.Entities;
using Microsoft.Practices.Unity;

namespace Prisa.UI
{
    public partial class FrmGestionMenudeo : Form
    {
        public FrmGestionMenudeo()
        {
            InitializeComponent();
            this.BuildUp();
        }

        [Dependency]
        public IHistorialVentaBL historialBL { get; set; }


        private void FrmMenudeo_Load(object sender, EventArgs e)
        {
            var menudeo = true;
            hISTORIAL_VENTASBindingSource.DataSource = historialBL.GetFromHistorialVentasbyFechasAndProductoAndMenudeo(null, null, "", menudeo);
        }

        private void hISTORIAL_VENTASDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _currentMenudeo = hISTORIAL_VENTASBindingSource.Current as HISTORIAL_VENTAS;

            if (this.hISTORIAL_VENTASDataGridView.Columns[e.ColumnIndex].Name.Equals("Cancelar"))
            {
                if (_currentMenudeo.Cancelada == false)//no esta cancelada
                {
                    if (txtObservacion.Text.Length != 0)
                    {
                        _currentMenudeo.Cancelada = true;
                        _currentMenudeo.Observacion = txtObservacion.Text.ToUpper();
                        historialBL.UpdateHistorialMenudeo(_currentMenudeo);
                        MessageBox.Show(this, string.Format("Venta cancelada correctamente"),"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        TodosLosBuscar();
                    }
                    else
                    {
                        MessageBox.Show(this, string.Format("Es necesario ingresar una observación"),"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        txtObservacion.Focus();
                    }
                }
                else
                {
                    MessageBox.Show(this, string.Format("Esta venta ya se encuentra cancelada"),"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }


        private void ReiniciarFechas()
        {
            dtpDesde.Value = DateTime.Now.Date;
            var fec2 = dtpDesde.Value.Date;
            dtpHasta.Value = fec2.AddDays(1);
        }
        private void TodosLosBuscar()
        {
            var menudeo = true;
            var fec1 = dtpDesde.Value.Date;
            var fec2 = dtpHasta.Value.Date;
            
            if (rbtnTodos.Checked == true)
            {
                hISTORIAL_VENTASBindingSource.DataSource = historialBL.
                    GetFromHistorialVentasbyFechasAndProductoAndMenudeo(null, null, txtCriterio.Text, menudeo);
            }

            if (rbtnFechas.Checked == true)
            {
                if (fec1 <= fec2)
                {
                    hISTORIAL_VENTASBindingSource.DataSource = historialBL.
                        GetFromHistorialVentasbyFechasAndProductoAndMenudeo(fec1, fec2, txtCriterio.Text, menudeo);
                }
                else
                {
                    ReiniciarFechas();
                    MessageBox.Show("La fecha de inicio debe ser menor a la fecha de término", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            if (rbtnDia.Checked == true)
            {
                hISTORIAL_VENTASBindingSource.DataSource = historialBL.
                    GetFromHistorialVentasbyFechasAndProductoAndMenudeo(fec1, null, txtCriterio.Text, menudeo);
            }
        }

        private void txtCliente_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                TodosLosBuscar();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            TodosLosBuscar();
        }

        private void rbtnTodos_Click(object sender, EventArgs e)
        {
            lblHasta.Visible = true;
            dtpHasta.Visible = true;

            dtpDesde.Enabled = false;
            dtpHasta.Enabled = false;
            TodosLosBuscar();
        }

        private void rbtnFechas_Click(object sender, EventArgs e)
        {
            ReiniciarFechas();
            lblDesde.Text = "Desde:";
            lblHasta.Visible = true;
            dtpHasta.Visible = true;

            dtpDesde.Enabled = true;
            dtpHasta.Enabled = true;
            TodosLosBuscar();
        }

        private void rbtnDia_Click(object sender, EventArgs e)
        {
            lblDesde.Text = "Día:";
            lblHasta.Visible = false;
            dtpHasta.Visible = false;

            dtpDesde.Enabled = true;
            dtpHasta.Enabled = true;

            TodosLosBuscar();
        }

        private void txtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
            var punto = Convert.ToString("."); 
            var slash = Convert.ToString(",");
            var guion = Convert.ToString("-");
            var amber = Convert.ToString("&");
            string cadena = guion + slash + punto + amber + (char)8;

            if (!cadena.Contains(e.KeyChar) && !(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar))
                && (e.KeyChar != (char)Keys.Back) && (e.KeyChar != (char)Keys.Enter) && (e.KeyChar != (char)Keys.Clear)
                && !(char.IsSeparator(e.KeyChar)))
            {
                e.Handled = true;
                return;
            }
        }

    }
}
